home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Compendium Deluxe 2
/
LSD and 17bit Compendium Deluxe - Volume II.iso
/
a
/
prog
/
misc
/
frefs11.lha
/
FetchRefs
/
Source
/
GenerateIndex
/
Main.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-04
|
8KB
|
269 lines
/**************************************************************************/
/* Main.c - startup, etc. */
/**************************************************************************/
#include "GenerateIndex.h"
extern struct WBStartup *_WBMsg;
extern void _waitwbmsg(void);
STRPTR InitialFile;
const UBYTE VersTag[] = "$VER: GenerateIndex " VERSION " " DATE;
const UBYTE Template[] = "FROM/M,TO,SETTINGS,"
"RECURSIVELY/S,KEEPEMPTY/S,UNRECOGAREDOCS/S,"
"AUTODOC/S,"
"C/S,C_DEFINE/S,C_STRUCT/S,C_TYPEDEF/S,"
"E/S,E_CONST/S,E_OBJECT/S,E_PROC/S,"
"ASM/S,ASM_EQU/S,ASM_STRUCTURE/S,ASM_MACRO/S";
const UBYTE CLI_Help[] = "\n"
"GenerateIndex [[FROM] {wildcard}] [TO <file>] [SETTINGS <file>]\n"
"\t[RECURSIVELY] [KEEPEMPTY] [UNRECOGAREDOCS]\n"
"\t[AUTODOC]\n"
"\t[C] [C_DEFINE] [C_STRUCT] [C_TYPEDEF]\n"
"\t[E] [E_CONST] [E_OBJECT] [E_PROC]\n"
"\t[ASM] [ASM_EQU] [ASM_STRUCTURE] [ASM_MACRO]\n"
"\n"
"- Not specifying FROM will open the GUI (ReqTools and Triton required)\n"
"- A script is handy for Shell usage\n"
"- Study the guide for more information\n"
"\n";
struct List FileList;
struct RDArgs *Args;
struct ReqToolsBase *ReqToolsBase;
ULONG ParseResult[LAST_ARGUMENT], Options;
/// _main( ) -- handle parsing of WB/Shell arguments
__stkargs LONG
_main(LONG argc, STRPTR argv)
{
ReqToolsBase = OpenLibrary("reqtools.library", 38);
NewList(&FileList);
if (_WBMsg)
{
struct DiskObject *diskobj;
CurrentDir(_WBMsg->sm_ArgList->wa_Lock);
if (diskobj = GetDiskObject(_WBMsg->sm_ArgList->wa_Name))
{
STRPTR arg;
if (arg = FindToolType(diskobj->do_ToolTypes, "TO"))
if (InitialFile = AllocVec(strlen(arg) + 1, NULL))
strcpy(InitialFile, arg);
if (arg = FindToolType(diskobj->do_ToolTypes, "SETTINGS"))
LoadSettings(arg);
else
LoadSettings("ENV:FetchRefs_GI.prefs");
FreeDiskObject(diskobj);
GoGUI();
} else
CloseAll(IoErr());
} else
{
if (Args = AllocDosObject(DOS_RDARGS, NULL))
{
Args->RDA_ExtHelp = CLI_Help; /* Activate extended help */
if (ReadArgs(Template, ParseResult, Args)) /* Parse arguments */
{
/* Set options */
if (ParseResult[SETTINGS])
LoadSettings((STRPTR)ParseResult[SETTINGS]);
else
{
if (ParseResult[AUTODOC])
Settings.AutoDocPrf.Active = TRUE;
if (ParseResult[CINC])
Settings.CPrf.Active = TRUE;
if (ParseResult[C_DEFINE])
Settings.CPrf.Define = TRUE;
if (ParseResult[C_STRUCT])
Settings.CPrf.Struct = TRUE;
if (ParseResult[C_TYPEDEF])
Settings.CPrf.Typedef = TRUE;
if (ParseResult[EINC])
Settings.EPrf.Active = TRUE;
if (ParseResult[E_CONST])
Settings.EPrf.Const = TRUE;
if (ParseResult[E_OBJECT])
Settings.EPrf.Object = TRUE;
if (ParseResult[E_PROC])
Settings.EPrf.Proc = TRUE;
if (ParseResult[ASMINC])
Settings.AsmPrf.Active = TRUE;
if (ParseResult[ASM_EQU])
Settings.AsmPrf.Equ = TRUE;
if (ParseResult[ASM_STRUCTURE])
Settings.AsmPrf.Structure = TRUE;
if (ParseResult[ASM_MACRO])
Settings.AsmPrf.Macro = TRUE;
if (ParseResult[RECURSIVELY])
Settings.Recursively = TRUE;
if (ParseResult[KEEPEMPTY])
Settings.KeepEmpty = TRUE;
if (ParseResult[UNRECOGAREDOCS])
Settings.UnknownFiles = UNKNOWN_ARE_AUTODOCS;
}
if (ParseResult[TO])
{
if (!ParseResult[FROM])
{
if (InitialFile = AllocVec(strlen((STRPTR)ParseResult[TO]) + 1, NULL))
strcpy(InitialFile, (STRPTR)ParseResult[TO]);
} else
LoadData((STRPTR)ParseResult[TO]);
}
if (!ParseResult[FROM])
GoGUI();
else if (ParseResult[TO])
{
/* Expand each wildcard (which can also be just a file) and generate index */
ULONG count;
STRPTR path;
struct AnchorPath *fanchor;
if (fanchor = AllocVec(sizeof(struct AnchorPath) + 256, MEMF_CLEAR))
{
fanchor->ap_Strlen = 256;
for (count = 0; path = ((UBYTE **)ParseResult[FROM])[count]; count++)
{
if (!MatchFirst(path, fanchor))
{
do
{
STRPTR name;
if (name = FullName(fanchor->ap_Buf))
{
if (fanchor->ap_Info.fib_DirEntryType < 0)
IndexFile(name, "");
else
IndexRecursive(fanchor->ap_Buf, "");
FreeVec(name);
} else
CloseAll(IoErr());
} while (!MatchNext(fanchor));
MatchEnd(fanchor);
}
}
FreeVec(fanchor);
SaveData((STRPTR)ParseResult[TO]);
} else
CloseAll(ERROR_NO_FREE_STORE);
} else
CloseAll(ERROR_REQUIRED_ARG_MISSING);
} else
CloseAll(IoErr());
} else
CloseAll(ERROR_NO_FREE_STORE);
}
CloseAll(0);
}
///
/// LoadSettings()
void
LoadSettings(STRPTR file)
{
BPTR fil;
if (fil = Open(file, MODE_OLDFILE))
{
Read(fil, &Settings, sizeof(Settings));
Close(fil);
}
}
///
/// SaveSettings()
void
SaveSettings(STRPTR file)
{
BPTR fil;
if (fil = Open(file, MODE_NEWFILE))
{
Write(fil, &Settings, sizeof(Settings));
Close(fil);
}
}
///
/// CloseAll(LONG error [, STRPTR errtxt])
void
CloseAll(LONG error, ...)
{
STRPTR errtxt;
va_list args;
va_start(args, error);
errtxt = *(STRPTR *)args;
va_end(args);
FreeVec(InitialFile);
if (Args)
{
FreeArgs(Args);
FreeDosObject(DOS_RDARGS, Args);
}
ClearFileList();
if (error)
{
UBYTE errortxt[80];
static struct EasyStruct errreq = {
sizeof(struct EasyStruct),
0,
"GenerateIndex " VERSION " by Anders Melchiorsen",
"%s\n(Error code #%ld)",
"Quit"
};
if (error == ERROR_SPECIAL)
{
strcpy(errortxt, errtxt);
errreq.es_TextFormat[2] = 0;
} else
Fault(error, "GenerateIndex", errortxt, 80);
if (_WBMsg)
EasyRequest(NULL, &errreq, NULL, errortxt, error);
else
{
PutStr(errortxt);
PutStr("\n");
}
}
CloseLibrary(&ReqToolsBase->LibNode);
_exit(error ? 5 : 0);
_waitwbmsg(); /* Dummy reference; never actually called */
}
///
/// chkabort(void) -- disable DICE ^C check
void
chkabort(void)
{
return;
}
///